#include"BlockQueue.hpp"
#include"Task.hpp"
#include<iostream>

void* consumer(void* args)
{
    BlockQueue<task_t> *bq = static_cast<BlockQueue<task_t>*>(args);

    while(true)
    {
        sleep(3);
        task_t t = bq->Pop();
        //t();
    }
}

void* productor(void* args)
{
    BlockQueue<task_t> *bq = static_cast<BlockQueue<task_t>*>(args);

    while(true)
    {
        
        bq->Equeue(Download);
        std::cout<<"生产了一个任务"<<std::endl;
    }
}
int main()
{
    BlockQueue<task_t> *bq  = new BlockQueue<task_t>();

    pthread_t c[2],p[3];

    pthread_create(c,nullptr,consumer,bq);
    pthread_create(c+1,nullptr,consumer,bq);

    pthread_create(p,nullptr,productor,bq);
    pthread_create(p+1,nullptr,productor,bq);
    pthread_create(p+2,nullptr,productor,bq);

    pthread_join(c[0],nullptr);
    pthread_join(c[1],nullptr);
    pthread_join(p[0],nullptr);
    pthread_join(p[1],nullptr);
    pthread_join(p[2],nullptr);

}



// void* consumer(void* args)
// {
//     BlockQueue<Task> *bq = static_cast<BlockQueue<Task>*>(args);
   

//     while(true)
//     {
//         sleep(1);
//        Task t = bq->Pop();
//        t.Execute();
//        std::cout<<"消费了一个任务："<<t.A()<<"+"<<t.B()<<"="<<t.Result()<<std::endl;
//     }
// }

// void* productor(void* args)
// {
//     BlockQueue<Task> *bq = static_cast<BlockQueue<Task>*>(args);
//     int a = 1,b = 1;

//     while(true)
//     {

//         Task t(a,b);
//         bq->Equeue(t);
//         std::cout<<"生成了一个任务"<<std::endl;
//         a++,b++;
//     }
// }
// int main()
// {
//     BlockQueue<Task> *bq  = new BlockQueue<Task>();

//     pthread_t c,p;

//     pthread_create(&c,nullptr,consumer,bq);
//     pthread_create(&p,nullptr,productor,bq);
   

//     pthread_join(c,nullptr);
//     pthread_join(p,nullptr);
   
// }


